/*
    路由校验思路：
        1.判断该路由是否需要守卫：
            1.1 不需要：可以进入 next()
            1.2 需要：判断是否有token
                1.2.1 没有：跳回登录页
                1.2.3 有：判断token是否正确和是否过期
                    1.2.3.1 token验证通过：next()
                    1.2.3.2 token验证不通过:跳回登录页 (token是错的；过期；又是错的又是过期的)
*/

/* 
    前置路由钩子函数：
    to ：即将要进入的目标路由对象
    from ：当前导航正要离开的路由对象
    next : 调用该方法，进入目标路由

    尽量去路由表配置元信息：meta: {
                            ischeck: false, //不需要路由守卫；
                         }
    //meta元信息名字固定，里面键值对随意；
*/

//实现路由拦截  ，在main.js，引入；
import router from "./router";
import { getToken } from "./utils/auth.js";
import usersApi from "./api/userApi.js";

router.beforeEach((to, from, next) => {
    // 判断进入的页面是否需要守卫
    if (to.meta.ischeck == true) {
        //需要守卫(鉴权/权限校验)
        let token = getToken();//不存在为undefined
        //判断是否有token
        if (token) {
            //有token，发请求验证token
            usersApi.checktoken(token).then((res) => {
                //   token是否有效
                if (res.data.code) {
                    // token检验通过
                    next();
                } else {
                    // token校验不通过：跳转登录页重新登录(登录页不需要守卫；可以直接跳)【注】push是router身上的方法
                    router.push("/login");
                }
            });
        } else {
            //没有token,跳回登录页;
            router.push("/login");
        }
    } else {
        //不需要守卫
        next();
    }
});
